/*
 * ajax上传工具
 * 结合 ajaxFileUpload.js 使用
 * version : "2.0",
 * auther : "陈 庭",
 *
 * Date: 2015-02-23
 *
 */
 (function($){
    $.yxAjaxUpload = {
        /* 版本号 */
        version : "2.0",
        auther : "陈 庭",


        createUploadFileInput: function(config){  //创建FORM 
            //create input:file
            var fileId = 'yxUploadFile' + config.id;

            if($('#' + fileId).length > 0){ //删除已经存在的 iframe ；如果不删除的话，下次上传 load 事件会失效；
                $('#' + fileId).remove();
            }

            //定义一个随时移动的file控件 [可以把字体样式大一些，主要是兼容 IE 的输入条；让按钮的位置占多一些; font-size:120px;]
            var fileInput = jQuery('<input type="file" id="' + fileId + '" name="' + fileId + '" value="文件异步上传" style=" opacity:0; position:absolute; top:0px; left:0px;z-index:999;width:0px;cursor:pointer;display:block;" />');

            // 设置按钮透明度
            if (!$.support.leadingWhitespace){
               $(fileInput).css("filter", 'progid:DXImageTransform.Microsoft.Alpha(opacity='+config.alpha*100+')');
            }else{
                $(fileInput).css("opacity", config.alpha);
            }


            //$("body").append(fileInput);
//alert(config.id);
            $("#div_"+config.id).append(fileInput);
            $("#div_"+config.id).append($("#btn_"+config.id));
            //alert(config.id);


            config.fileElementId = fileId;  //设置 input:file的 id ；给 ajaxFileUpload 使用

            $('#' + fileId).change(function(){    //绑定自动提交事件
                // alert($(this).val());

                var file_ext = $(this).val().toLowerCase().substr($(this).val().lastIndexOf(".") + 1);
                if(config.filter == '' || (',' + config.filter + ',').indexOf(',' + file_ext + ',') != -1){   //允许上传的后缀名
                    // alert("通过 : " + file_ext);


                    $.ajaxFileUpload(config);   //使用 ajaxFileUpload提交表单

                    //重新建一个 input:file (因为提交一次后，input:file 已经被 ajaxFileUplaod 换成了一个同名ID的新控件，但是没有了 change 事件，无法再次提交，所以需要重新创建一个新的控件用于下次提交)
                    $.yxAjaxUpload.createUploadFileInput(config);


                }else{
                    alert("请上传以下类型的文件 ：" + config.filter);
                }

            });

            return {fileId:fileId};
        }
    }

    

    $.fn.yxAjaxUpload = function(options) {
        var config = $.extend({}, $.fn.yxAjaxUpload.defaults, options);

        if(config.id == ""){
            config.id = new Date().getTime()+Math.floor(Math.random() * 999 + 1);
        }

        $(this).before("<div id=\"div_"+config.id+"\" style=\"position: relative; display: inline-block; cursor: pointer;\"></div>");
        $(this).attr("id","btn_"+config.id);

        //$("#div_"+config.id).append(self);

        //创建 input:file
        var objJson = $.yxAjaxUpload.createUploadFileInput(config);

        return this.each(function() { 
            $(this).mouseover(function (){  //绑定元素事件
                $.fn.yxAjaxUpload.defaults.clickItem = $(this); //当前元素

                //把input按钮定位到当前元素位置，并完全盖住当前元素；
                $('#' + objJson.fileId).width($(this).outerWidth());
                $('#' + objJson.fileId).height($(this).outerHeight());
                //$('#' + objJson.fileId).css('top', $(this).offset().top);
               // $('#' + objJson.fileId).css('left', $(this).offset().left);
                $('#' + objJson.fileId).css('opacity', 0);
               
            }); 
        });
    };

    // 默认配置参数
    $.fn.yxAjaxUpload.defaults = {
        id : "",    //一般不需要设置
        alpha: 0,    // file控件按钮的透明度 ; 一般不需要设置
        clickItem: null,    //点击的来源元素；不需要设置，系统自动应用

        // 下面是 ajaxFileUpload.js 需要的 配置
        url : "",
        filter : "",    //需要过滤的后缀名，使用,号隔开，例如 "jpg,png,gif"
        secureuri:false,
        // fileElementId:'',   //input:file 的ID，不需要填写
        dataType: 'text',   //可以为text, json, script, html, xml 
        success: function(data, status, item) {},  //成功回调事件
        error: function(data, status, e, item){},  //失败回调事件
        complete: function(xml, status, item){},  //完成回调事件
        timeout:0,   //上传等待超时设置; 0为不设置超时设置
        global:false    //是否有全局的 ajax 方法监控需要回调
    };
})(jQuery);



//下面方法主要为补充 ajaxfileupload.js 工具对 jquery 版本兼容问题
jQuery.extend({

    handleError: function(s, xhr, status, e) {
        // If a local callback was specified, fire it
        if (s.error) {
            s.error.call(s.context || s, xhr, status, e);
        }

        // Fire the global callback
        if (s.global) {
            (s.context ? jQuery(s.context) : jQuery.event).trigger("ajaxError", [xhr, s, e]);
        }
    }
});

